"""初始化和登录服务模块"""
import json
import os
from colorama import Fore

from config.settings import Config
from common.tools.api_client import APIClient
from common.tools.is_null import is_null
from common.tools.out import out
from common.tools.clear_console import clear_console


class InitService:
    """初始化服务类"""
    
    def __init__(self):
        self.api_client = APIClient()
    
    def check_and_create_files(self):
        """检查并创建必要的文件和目录"""
        print('┌───────────────────────────────────────')
        
        # 检查配置文件
        try:
            print('│ 正在检查配置文件...')
            if not os.path.exists(Config.CONFIG_FILE):
                print('│ 正在创建配置文件...')
                with open(Config.CONFIG_FILE, 'w', encoding='utf-8') as f:
                    json.dump(Config.DEFAULT_CONFIG, f, ensure_ascii=False, indent=4)
        except FileExistsError as e:
            print('│ 配置文件创建失败：', str(e))
            out()
        
        # 检查截图文件夹
        try:
            print('│ 正在检查截图文件夹...')
            if not os.path.exists(Config.SCREENSHOT_DIR):
                print('│ 正在创建截图文件夹...')
                os.makedirs(Config.SCREENSHOT_DIR)
        except FileExistsError as e:
            print('│ 文件夹创建失败：', str(e))
            out()
        
        # 获取版本信息和更新字典
        try:
            print('│ 正在获取版本信息...')
            response_data = self.api_client.get_version()
            
            print('│ 正在更新字典...')
            items = response_data['data']['dictionary'].split(',')
            with open(Config.DICT_FILE, 'w', encoding='utf-8') as file:
                for item in items:
                    file.write(item.strip() + '\n')
            
            print('│ 当前版本:【' + Config.VERSION + '】')
            print('│ 最新版本:【' + response_data['data']['version'] + '】')
            print('│ 版本公告:\n' + Fore.RED + response_data['data']['notice'])
            
            if Config.VERSION != response_data['data']['version']:
                print('│ 已发布新版本，请前往下载更新！')
                
        except Exception as e:
            print('│ 获取版本信息失败：', str(e))
    
    def login(self):
        """用户登录"""
        config = Config.load_config()
        username = config.get('账号', '')
        password = config.get('密码', '')
        
        if is_null(username) or is_null(password):
            print('│ 用户名或密码为空！请先在参数工具中配置')
            out()
        
        print('│ 登录账号:' + username)
        input('│ 按回车键登录...')
        print('│ 正在登录...')
        
        login_data = self.api_client.login(username, password)
        
        if login_data['status'] == 400:
            print('│ ' + login_data['msg'])
            out()
        elif login_data['status'] == 200:
            clear_console()
            print('┌───────────────────────────────────────')
            print('│ 欢迎【' + login_data['data']['roles'] + '】用户：' + login_data['data']['nickname'])
            
            if login_data['data']['roles'] == '付费':
                if login_data['data']['weeks'] > 0:
                    print('│ 包括本周，您还可以使用[' + str(login_data['data']['weeks']) + ']周')
                else:
                    print('│ ' + login_data['msg'])
            else:
                print('│ 您的账号为免费账号，仅可使用题库查询')
            
            print('│ 当前使用参数方案[' + str(login_data['data']['coordinate']) + ']')
            return login_data
        else:
            print('│ 登录失败！')
            out()

    def login_with_config(self):
        """基于配置文件的静默登录（不使用控制台 input），供 UI 调用"""
        config = Config.load_config()
        username = config.get('账号', '')
        password = config.get('密码', '')

        if is_null(username) or is_null(password):
            raise ValueError('用户名或密码为空！请先在参数工具中配置')

        login_data = self.api_client.login(username, password)
        if login_data.get('status') != 200:
            # 与原 login 行为保持一致，抛出异常由 UI 处理
            raise RuntimeError(login_data.get('msg', '登录失败'))
        return login_data
